package com.macro.mall.pms.service;

import com.github.pagehelper.Page;
import com.macro.mall.pms.domain.Sku;
import com.macro.mall.pms.entity.SkuEntity;
import com.macro.mall.pms.service.bo.InsertSkuInput;
import com.macro.mall.pms.service.bo.PagedQuerySkuInput;
import com.macro.mall.pms.service.bo.UpdateSkuInput;

import java.util.List;

/**
 * skuService
 *
 * @author xuyanjun
 * @date 2019-12-13
 */
public interface SkuService {

    /**
     * 新增sku
     *
     * @param input input
     * @return 新增id
     */
    long insert(InsertSkuInput input);

    /**
     * 递增销量
     *
     * @param productId     商品id
     * @param increaseCount 递增数量
     */
    void increaseSale(long productId, int increaseCount);

    /**
     * 修改sku
     *
     * @param input input
     */
    void update(UpdateSkuInput input);

    /**
     * 删除sku
     *
     * @param id id
     */
    void delete(long id);

    /**
     * 根据Id获取sku
     *
     * @param id id
     * @return sku
     */
    SkuEntity getById(long id);

    /**
     * 根据批量Id获取sku
     *
     * @param batchIds 批量ids
     * @return sku集合
     */
    List<SkuEntity> listByBatchIds(List<Long> batchIds);

    /**
     * 根据商品Id获取sku
     *
     * @param productId 批量ids
     * @return sku集合
     */
    List<SkuEntity> listByProductId(long productId);

    /**
     * 分页查询
     *
     * @param input input
     * @return 分页的sku
     */
    Page<SkuEntity> pagedQuery(PagedQuerySkuInput input);

    /**
     * 将实体对象转换成domain对象
     *
     * @param skuEntity 实体
     * @return sku
     */
    Sku entityToDomain(SkuEntity skuEntity);

    /**
     * 将实体对象转换成domain对象
     *
     * @param skuEntities 实体
     * @return skus
     */
    List<Sku> entityToDomain(List<SkuEntity> skuEntities);

}